package com.expert.miniapp.dto;

import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

/**
 * 统一响应结构
 * 用于封装所有API接口的返回数据
 * @param <T> 数据类型
 */
@Data
@NoArgsConstructor
public class ResultDTO<T> {
    
    public ResultDTO(boolean success, String errorMsg, T data) {
        this.success = success;
        this.errorMsg = errorMsg;
        this.data = data;
    }
    
    /**
     * 请求是否成功
     */
    private boolean success;
    
    /**
     * 错误信息（当success为false时使用）
     */
    private String errorMsg;
    
    /**
     * 返回的数据
     */
    private T data;
    
    // 手动添加getter方法以确保JSON序列化正常工作
    public boolean isSuccess() {
        return success;
    }
    
    public String getErrorMsg() {
        return errorMsg;
    }
    
    public T getData() {
        return data;
    }
    
    /**
     * 成功响应的静态方法
     * @param data 返回的数据
     * @param <T> 数据类型
     * @return 成功的ResultDTO对象
     */
    public static <T> ResultDTO<T> success(T data) {
        return new ResultDTO<>(true, null, data);
    }
    
    /**
     * 错误响应的静态方法
     * @param message 错误信息
     * @param <T> 数据类型
     * @return 错误的ResultDTO对象
     */
    public static <T> ResultDTO<T> error(String message) {
        return new ResultDTO<>(false, message, null);
    }
}